package it.unibo.iss.domotica.usecase.test;

import java.util.ArrayList;

import org.junit.Test;

import it.unibo.iss.contact.domoticaContact.UsrcmdContact;
import it.unibo.iss.domotica.edDomain.Elettrodomestico;
import it.unibo.iss.domotica.edDomain.StatoED;
import it.unibo.iss.domotica.usecase.testcommon.TestCommon;


public class PowerOnFailWithoutEdSuperflui extends TestCommon {

	@Test
	public void testPowerOnFailWithoutEdSuperflui() {
		String edName1 = "edIA0";
		String edName2 = "edIB2";	
		String edName3 = "edIA1";	
		String edName4 = "edIM0";
		
		Elettrodomestico ed1 = (Elettrodomestico) elettrodomestici.getED(edName1);
		Elettrodomestico ed2 = (Elettrodomestico) elettrodomestici.getED(edName2);
		Elettrodomestico ed3 = (Elettrodomestico) elettrodomestici.getED(edName3);
		Elettrodomestico ed4 = (Elettrodomestico) elettrodomestici.getED(edName4);
		
		ArrayList<Elettrodomestico> listEdSuperflui;
		
		powerOnSensor(edName1, 1001, 1001);
		powerOnSensor(edName2, 450, 450);	
		powerOnSensor(edName3, 1001, 1001);	// i primi 3 elettrodomestici consumano 2998
		powerOnSensor(edName4, 501, 1000);	// il quarto non deve accendersi
		
		try {
			// Power On ed1
			
			logger.debug("Trying power on " + edName1);
			listEdSuperflui = usrcmd.powerOn(edName1);
			if(!usrcmd.isError()) {
				logger.debug("Power On for " + edName1 + " succeded");
				assertTrue(edName1 + " off", ed1.getStato() != StatoED.OFF);
			}
			else {
				logger.debug("Power On for " + edName1 + " failed");
				fail("Power On failed for " + edName1);
			}
			
			// Power On ed2
			
			logger.debug("Trying power on " + edName2);
			listEdSuperflui = usrcmd.powerOn(edName2);
			if(!usrcmd.isError()) {
				logger.debug("Power On for " + edName2 + " succeded");
				assertTrue(edName2 + " off", ed2.getStato() != StatoED.OFF);
			}
			else {
				logger.debug("Power On for " + edName2 + " failed");
				fail("Power On failed for " + edName2);
			}
			
			// Power On ed3
			
			logger.debug("Trying power on " + edName3);
			listEdSuperflui = usrcmd.powerOn(edName3);
			if(!usrcmd.isError()) {
				logger.debug("Power On for " + edName3 + " succeded");
				assertTrue(edName3 + " off", ed3.getStato() != StatoED.OFF);
			}
			else {
				logger.debug("Power On for " + edName3 + " failed");
				fail("Power On failed for " + edName3);
			}
			
			Thread.sleep(1000);
			consumptionController.updateConsumption();
			Thread.sleep(1000);
			
			
			// Power On ed4 (it can't be powered on)
			
			logger.debug("Trying power on " + edName4);
			listEdSuperflui = usrcmd.powerOn(edName4);
			if(listEdSuperflui == null && !usrcmd.isError()) {
				logger.debug("Power On for " + edName4 + " succeded");
				fail("Power On succeded for " + edName4);
			}
			else {
				logger.debug("Power On for " + edName4 + ": " + usrcmd.getErrorMessage());
				assertTrue(ed4.getStato() == StatoED.OFF);
				assertEquals("There aren't household appliances superflui", usrcmd.getErrorMessage());
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
